// 加油站API服务
// 连接真实后端API接口
import { get, post } from './request.js';
import { getAmapKey, getAmapBaseUrl } from '@/config/api.js';

// 延迟函数
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));

// API基础路径 - 根据后端实际路径调整
const API_BASE = '/mobile';

// 高德地图API配置
const AMAP_KEY = getAmapKey();
const AMAP_BASE_URL = getAmapBaseUrl();

// 计算两点间距离（米）
const calculateDistance = (lat1, lng1, lat2, lng2) => {
	const R = 6371000; // 地球半径（米）
	const dLat = (lat2 - lat1) * Math.PI / 180;
	const dLng = (lng2 - lng1) * Math.PI / 180;
	const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
		Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
		Math.sin(dLng / 2) * Math.sin(dLng / 2);
	const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
	return R * c;
};

// 格式化距离显示
const formatDistance = (distance) => {
	if (distance < 1000) {
		return `${Math.round(distance)}m`;
	} else {
		return `${(distance / 1000).toFixed(1)}km`;
	}
};

// 从高德地图API获取真实加油站数据
export const getRealGasStations = async (params = {}) => {
	try {
		const { latitude, longitude, radius = 3000 } = params;
		
		if (!latitude || !longitude) {
			throw new Error('缺少位置信息');
		}

		// 构建API请求URL
		const url = `${AMAP_BASE_URL}/place/around?key=${AMAP_KEY}&location=${longitude},${latitude}&keywords=加油站&radius=${radius}&types=汽车服务|汽车维修|汽车销售&offset=20&page=1&extensions=all`;

		console.log('请求高德地图API:', url);

		// 发送请求
		const response = await fetch(url);
		const data = await response.json();

		if (data.status === '1' && data.pois) {
			// 处理返回的加油站数据
			const gasStations = data.pois.map((poi, index) => {
				const distance = calculateDistance(latitude, longitude, poi.location.split(',')[1], poi.location.split(',')[0]);
				
				return {
					id: poi.id || index + 1,
					name: poi.name,
					price: generateRandomPrice(), // 价格信息需要从其他API获取
					discount: generateRandomDiscount(),
					address: poi.address || poi.pname + poi.cityname + poi.adname,
					distance: formatDistance(distance),
					image: getRandomStationImage(),
					latitude: parseFloat(poi.location.split(',')[1]),
					longitude: parseFloat(poi.location.split(',')[0]),
					rating: parseFloat(poi.biz_ext?.rating || '4.0'),
					openTime: poi.biz_ext?.cost || '24小时营业',
					services: ['加油'], // 基础服务
					phone: poi.tel || '',
					realData: true // 标记为真实数据
				};
			});

			// 按距离排序
			gasStations.sort((a, b) => {
				const distanceA = parseFloat(a.distance.replace('km', '000').replace('m', ''));
				const distanceB = parseFloat(b.distance.replace('km', '000').replace('m', ''));
				return distanceA - distanceB;
			});

			return {
				success: true,
				data: gasStations,
				total: gasStations.length,
				message: '获取成功'
			};
		} else {
			throw new Error(data.info || '获取加油站数据失败');
		}
	} catch (error) {
		console.error('获取真实加油站数据失败:', error);
		// 如果真实API失败，回退到模拟数据
		return await getMockGasStations(params);
	}
};

// 生成随机价格（模拟）
const generateRandomPrice = () => {
	const basePrice = 5.8 + Math.random() * 0.4;
	return basePrice.toFixed(2);
};

// 生成随机优惠（模拟）
const generateRandomDiscount = () => {
	const discounts = [
		'满200减20',
		'满300减30',
		'满150减15',
		'满100减10',
		'满500减50',
		'满250减25'
	];
	return discounts[Math.floor(Math.random() * discounts.length)];
};

// 获取随机加油站图片
const getRandomStationImage = () => {
	const images = ['/static/c1.png', '/static/c2.png', '/static/c3.png', '/static/c4.png', '/static/c5.png'];
	return images[Math.floor(Math.random() * images.length)];
};

// 获取模拟加油站数据（原有功能）
export const getMockGasStations = async (params = {}) => {
	// 模拟API调用延迟
	await delay(500);
	
	// 获取用户位置，如果没有则使用默认位置
	const userLat = params.latitude || 39.9042;
	const userLng = params.longitude || 116.4074;
	
	// 基于用户位置生成附近的加油站（郑州高新区）
	const mockData = [
		{
			id: 1,
			name: '中国石油郑州高新区加油站',
			price: '5.97',
			discount: '满200减20',
			address: '郑州高新区雪松路与牡丹路交叉口',
			distance: '120m',
			image: '/static/c1.png',
			latitude: userLat + 0.0008,
			longitude: userLng + 0.0006,
			rating: 4.5,
			openTime: '24小时营业',
			services: ['加油', '洗车', '便利店']
		},
		{
			id: 2,
			name: '中国石化郑州高新区加油站',
			price: '5.95',
			discount: '满300减30',
			address: '郑州高新区银杏路与金梭路交叉口',
			distance: '280m',
			image: '/static/c2.png',
			latitude: userLat - 0.0005,
			longitude: userLng + 0.0012,
			rating: 4.3,
			openTime: '06:00-22:00',
			services: ['加油', '便利店']
		},
		{
			id: 3,
			name: '中海油郑州高新区加油站',
			price: '5.93',
			discount: '满150减15',
			address: '郑州高新区白桦街与紫萱街交叉口',
			distance: '450m',
			image: '/static/c3.png',
			latitude: userLat + 0.0012,
			longitude: userLng - 0.0008,
			rating: 4.7,
			openTime: '24小时营业',
			services: ['加油', '洗车', '便利店', '餐饮']
		},
		{
			id: 4,
			name: '郑州高新区民营加油站',
			price: '5.89',
			discount: '满100减10',
			address: '郑州高新区东史马小区附近',
			distance: '600m',
			image: '/static/c4.png',
			latitude: userLat - 0.0015,
			longitude: userLng - 0.0010,
			rating: 4.1,
			openTime: '07:00-21:00',
			services: ['加油']
		},
		{
			id: 5,
			name: '壳牌郑州高新区加油站',
			price: '5.99',
			discount: '满500减50',
			address: '郑州高新区荣邦城附近',
			distance: '800m',
			image: '/static/c5.png',
			latitude: userLat + 0.0020,
			longitude: userLng + 0.0015,
			rating: 4.8,
			openTime: '24小时营业',
			services: ['加油', '洗车', '便利店', '餐饮', '休息区']
		},
		{
			id: 6,
			name: '道达尔郑州高新区加油站',
			price: '5.91',
			discount: '满250减25',
			address: '郑州高新区学府嘉园附近',
			distance: '1.2km',
			image: '/static/c1.png',
			latitude: userLat - 0.0025,
			longitude: userLng + 0.0020,
			rating: 4.2,
			openTime: '06:00-23:00',
			services: ['加油', '便利店']
		}
	];
	
	// 模拟筛选逻辑
	let filteredData = [...mockData];
	
	// 根据关键词搜索
	if (params.keyword) {
		const keyword = params.keyword.toLowerCase();
		filteredData = filteredData.filter(station => 
			station.name.toLowerCase().includes(keyword) || 
			station.address.toLowerCase().includes(keyword)
		);
	}
	
	// 根据距离排序
	if (params.sortBy === 'distance') {
		filteredData.sort((a, b) => {
			// 将距离字符串转换为米数进行比较
			const parseDistance = (distanceStr) => {
				if (distanceStr.includes('km')) {
					return parseFloat(distanceStr) * 1000;
				} else if (distanceStr.includes('m')) {
					return parseFloat(distanceStr);
				}
				return 0;
			};
			
			const distanceA = parseDistance(a.distance);
			const distanceB = parseDistance(b.distance);
			return distanceA - distanceB;
		});
	}
	
	// 根据价格排序
	if (params.sortBy === 'price') {
		filteredData.sort((a, b) => parseFloat(a.price) - parseFloat(b.price));
	}
	
	return {
		success: true,
		data: filteredData,
		total: filteredData.length,
		message: '获取成功'
	};
};

// 获取加油站详情
export const getGasStationDetail = async (id) => {
	try {
		const response = await get(`${API_BASE}/gas-stations/${id}`);
		
		console.log('加油站详情API响应:', response);
		
		// 根据你的request.js，这里直接返回后端AjaxResult对象
		// 后端返回格式：{code: 200, msg: "操作成功", data: {...}}
		return response;
	} catch (error) {
		console.error('获取加油站详情失败:', error);
		throw error;
	}
};

// 模拟数据（当后端API不可用时使用）
async function getMockGasStationDetail(stationId) {
	await delay(300);
	
	console.log('使用模拟数据，ID:', stationId);
	
	// 根据ID获取对应的加油站数据（与数据库完全一致）
	const stationData = {
		1: {
			id: 1,
			name: '中国石油郑州高新区加油站',
			price: '5.97',
			discount: '满200减20',
			address: '郑州高新区雪松路与牡丹路交叉口',
			distance: '120m',
			image: '/static/c1.png',
			latitude: 34.7478,
			longitude: 113.6254,
			rating: 4.5,
			openTime: '08:00-22:00', // 数据库中的实际时间
			services: ['加油', '洗车', '便利店'],
			description: '中国石油官方加油站，位于郑州高新区核心区域，提供优质油品和服务，支持多种支付方式。',
			contact: '0371-88888888', // 数据库中的实际电话
			images: ['/static/c1.png', '/static/c2.png', '/static/c3.png']
		},
		2: {
			id: 2,
			name: '中国石化郑州高新区加油站',
			price: '5.95',
			discount: '满300减30',
			address: '郑州高新区银杏路与金梭路交叉口',
			distance: '280m',
			image: '/static/c2.png',
			latitude: 34.7465,
			longitude: 113.6270,
			rating: 4.3,
			openTime: '06:00-22:00',
			services: ['加油', '便利店'],
			description: '中国石化官方加油站，位于郑州高新区银杏路商圈，提供优质油品，环境整洁，服务周到。',
			contact: '0371-87654321',
			images: ['/static/c2.png', '/static/c1.png', '/static/c3.png']
		}
	};
	
	const mockDetail = stationData[stationId] || stationData[1];
	console.log('模拟数据详情:', mockDetail);
	
	return {
		success: true,
		data: mockDetail,
		message: '获取成功（模拟数据）'
	};
}

// 搜索加油站
export const searchGasStations = async (keyword) => {
	try {
		const response = await get(`${API_BASE}/gas-stations/search?keyword=${encodeURIComponent(keyword)}`);
		
		console.log('搜索加油站API响应:', response);
		
		// 根据你的request.js，这里直接返回后端AjaxResult对象
		// 后端返回格式：{code: 200, msg: "操作成功", data: [...]}
		return response;
	} catch (error) {
		console.error('搜索加油站失败:', error);
		throw error;
	}
};

// 获取用户当前位置
export const getCurrentLocation = async () => {
	try {
		console.log('获取用户当前位置');
		
		// 尝试多个可能的API路径
		let response;
		
		try {
			response = await get(`${API_BASE}/location/current`);
		} catch (error) {
			console.log('主要位置API路径失败，尝试备用路径');
			try {
				response = await get(`${API_BASE}/location`);
			} catch (error2) {
				console.log('备用位置API路径也失败，尝试备用路径2');
				try {
					response = await get(`${API_BASE}/user/location`);
				} catch (error3) {
					console.log('备用位置API路径2也失败，尝试备用路径3');
					try {
						response = await get(`${API_BASE}/user/current-location`);
					} catch (error4) {
						console.log('所有位置API路径都失败，使用默认位置');
						// 返回默认位置数据，避免页面崩溃
						return {
							code: 200,
							msg: "使用默认位置",
							data: {
								latitude: 34.7472,
								longitude: 113.6253,
								address: '郑州市高新区'
							}
						};
					}
				}
			}
		}
		
		console.log('位置API响应:', response);
		
		// 根据你的request.js，这里直接返回后端AjaxResult对象
		// 后端返回格式：{code: 200, msg: "操作成功", data: {...}}
		return response;
	} catch (error) {
		console.error('获取当前位置失败:', error);
		// 返回默认位置数据，避免页面崩溃
		return {
			code: 200,
			msg: "获取失败，使用默认位置",
			data: {
				latitude: 34.7472,
				longitude: 113.6253,
				address: '郑州市高新区'
			}
		};
	}
};

// ==================== 真实后端API调用方法 ====================

// 获取所有加油站
export const getAllGasStations = async () => {
	try {
		console.log('获取所有加油站');
		
		const response = await get(`${API_BASE}/gas-stations`);
		
		console.log('获取所有加油站API响应:', response);
		
		// 检查响应状态和数据
		if (response.statusCode === 200 && response.data) {
			if (response.data.code === 200 && response.data.data) {
				const gasStations = response.data.data;
				console.log('后端原始数据:', gasStations);
				
				// 转换数据格式
				const convertedData = gasStations.map(station => ({
					id: station.gasStationId || station.id,
					name: station.name || '未知加油站',
					image: station.img || '/static/c1.png',
				price: '6.50',
				discount: station.message || '暂无优惠',
					address: station.address || '地址未知',
					distance: '未知',
					latitude: parseFloat(station.latitude || 0),
					longitude: parseFloat(station.longitude || 0),
				rating: 4.5,
				openTime: station.week || '24小时营业',
				services: ['加油'],
					phone: station.phone || '',
				realData: true
			}));
			
			return {
				success: true,
				data: convertedData,
				message: '获取成功'
			};
			} else {
				return {
					success: false,
					data: [],
					message: response.data.msg || '获取失败'
				};
			}
		} else {
		return {
				success: false,
			data: [],
				message: 'HTTP请求失败'
		};
		}
	} catch (error) {
		console.error('获取所有加油站失败:', error);
		return {
			success: false,
			data: [],
			message: '获取失败：' + (error.message || '网络错误')
		};
	}
};

// 获取附近加油站列表
export const getNearbyGasStations = async (latitude, longitude, radius = 5000) => {
	try {
		console.log('获取附近加油站: lat=', latitude, 'lng=', longitude, 'radius=', radius);
		
		// 尝试多个可能的API路径
		let response;
		
		try {
			response = await get(`${API_BASE}/gas-stations/nearby?lat=${latitude}&lng=${longitude}&radius=${radius}`);
		} catch (error) {
			console.log('主要加油站API路径失败，尝试备用路径');
			try {
				response = await get(`${API_BASE}/gas-stations?lat=${latitude}&lng=${longitude}&radius=${radius}`);
			} catch (error2) {
				console.log('备用加油站API路径也失败，尝试备用路径2');
				try {
					response = await get(`${API_BASE}/stations/nearby?lat=${latitude}&lng=${longitude}&radius=${radius}`);
				} catch (error3) {
					console.log('备用加油站API路径2也失败，尝试备用路径3');
					try {
						response = await get(`${API_BASE}/user/nearby-stations?lat=${latitude}&lng=${longitude}&radius=${radius}`);
					} catch (error4) {
						console.log('备用加油站API路径3也失败，尝试备用路径4');
						try {
							response = await get(`${API_BASE}/nearby-stations?lat=${latitude}&lng=${longitude}&radius=${radius}`);
						} catch (error5) {
							console.log('所有加油站API路径都失败，返回模拟数据');
							// 返回模拟数据结构，避免页面崩溃
							return {
								code: 200,
								msg: "暂无加油站数据",
								data: []
							};
						}
					}
				}
			}
		}
		
		console.log('加油站API响应:', response);
		
		// 根据你的request.js，这里直接返回后端AjaxResult对象
		// 后端返回格式：{code: 200, msg: "操作成功", data: [...]}
		return response;
	} catch (error) {
		console.error('获取附近加油站失败:', error);
		// 返回模拟数据结构，避免页面崩溃
		return {
			code: 200,
			msg: "获取失败，使用模拟数据",
			data: []
		};
	}
};

// 获取加油站油价信息
async function getFuelPrices(stationId) {
	try {
		console.log('开始获取加油站油价，ID:', stationId);
		
		// 暂时使用现有的加油站详情接口获取数据
		// TODO: 后续后端需要添加专门的油价接口: /gas-stations/{id}/fuel-prices
		const response = await get(`${API_BASE}/gas-stations/${stationId}`);
		
		console.log('油价API响应:', response);
		
		if (response.statusCode === 200 && response.data && response.data.code === 200) {
			// 由于后端还没有专门的油价接口，我们根据加油站ID生成模拟油价
			// 这些价格基于你数据库中的 car_gas_station_type 表
			const mockFuelPrices = generateMockFuelPrices(stationId);
			console.log('生成的模拟油价数据:', mockFuelPrices);
			
			return mockFuelPrices;
		} else {
			console.log('油价API调用失败，使用默认油价');
			return getDefaultFuelPrices();
		}
	} catch (error) {
		console.error('获取油价失败:', error);
		console.log('使用默认油价数据');
		return getDefaultFuelPrices();
	}
}

// 根据加油站ID生成模拟油价（基于你的数据库数据）
function generateMockFuelPrices(stationId) {
	// 基于你数据库中的 car_gas_station_type 表数据
	const stationFuelData = {
		1: [ // 加油站ID 1
			{ gasTypeId: 1, price: 7.5 },  // 92#汽油
			{ gasTypeId: 2, price: 8.0 }   // 95#汽油
		],
		2: [ // 加油站ID 2
			{ gasTypeId: 1, price: 7.45 }, // 92#汽油
			{ gasTypeId: 3, price: 8.5 }   // 98#汽油
		],
		3: [ // 加油站ID 3
			{ gasTypeId: 2, price: 7.95 }  // 95#汽油
		],
		4: [ // 加油站ID 4
			{ gasTypeId: 4, price: 7.2 }   // 柴油
		],
		5: [ // 加油站ID 5
			{ gasTypeId: 1, price: 7.55 }  // 92#汽油
		]
	};
	
	const fuelData = stationFuelData[stationId] || stationFuelData[1];
	
	return fuelData.map(item => ({
		type: getFuelTypeName(item.gasTypeId),
		price: item.price.toFixed(2),
		gasTypeId: item.gasTypeId
	}));
}

// 根据油品类型ID获取名称
function getFuelTypeName(gasTypeId) {
	const fuelTypes = {
		1: '92#',
		2: '95#', 
		3: '98#',
		4: '0#', // 柴油
		5: 'E10' // 乙醇汽油
	};
	return fuelTypes[gasTypeId] || '未知';
}

// 默认油价数据（当API不可用时使用）
function getDefaultFuelPrices() {
	return [
		{ type: '92#', price: '5.87', gasTypeId: 1 },
		{ type: '95#', price: '5.97', gasTypeId: 2 },
		{ type: '98#', price: '6.27', gasTypeId: 3 },
		{ type: '0#', price: '5.77', gasTypeId: 4 }
	];
} 